[IA64] fix VTi hangs
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Mon, 28 Aug 2006 19:18:36 +0000 (13:18 -0600)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Mon, 28 Aug 2006 19:18:36 +0000 (13:18 -0600)
In some scenarios, xen_timer_interrupt will not set machine itm,
this may make this LP not receive timer interrupt any more.

Signed-off-by: Anthony Xu <anthony.xu@intel.com>
xen/arch/ia64/xen/xentime.c

index b1d32c50aeb9770b584dbfc5cbb33c811d44c7bc..0ebce66c29818572e6d579c1bec6f20aa7cfaf65 100644 (file)
@@ -109,6 +109,7 @@ void
 xen_timer_interrupt (int irq, void *dev_id, struct pt_regs *regs)
 {
        unsigned long new_itm, old_itc;
+       int f_setitm = 0;
 
 #if 0
 #define HEARTBEAT_FREQ 16      // period in seconds
@@ -129,11 +130,12 @@ xen_timer_interrupt (int irq, void *dev_id, struct pt_regs *regs)
                        vcpu_pend_timer(current);
                        // ensure another timer interrupt happens even if domain doesn't
                        vcpu_set_next_timer(current);
+                       f_setitm = 1;
                }
 
        new_itm = local_cpu_data->itm_next;
 
-       if (!VMX_DOMAIN(current) && !time_after(ia64_get_itc(), new_itm))
+       if (f_setitm && !time_after(ia64_get_itc(), new_itm)) 
                return;
 
        while (1) {